home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / share / ewl / examples / ewl_progressbar_test.c < prev    next >
C/C++ Source or Header  |  2006-01-09  |  6KB  |  212 lines

  1. #include "ewl_test.h"
  2.  
  3. static void __rerun_progressbars (Ewl_Widget * w, void *ev_data,
  4.                             void *user_data);
  5.  
  6. static Ewl_Widget *progressbar_button = NULL;
  7. static Ecore_Timer *progress_timer[3];
  8. static Ewl_Widget *progressbar[3];
  9.  
  10. static int
  11. __increment_progress(void *data)
  12. {
  13.     double val;
  14.     double value, range;
  15.     char c[30];
  16.     int i;
  17.     Ewl_Progressbar *p;
  18.     
  19.     p = EWL_PROGRESSBAR(data);
  20.     val = ewl_progressbar_value_get(p);
  21.  
  22.     if (val >= p->range) {
  23.         for (i = 0; i < 3; i++) {
  24.             if (progress_timer[i]) {
  25.                 ecore_timer_del(progress_timer[i]);
  26.                 progress_timer[i] = NULL;
  27.             }
  28.         }
  29.         return 0;
  30.     }
  31.  
  32.     val += 1;
  33.     ewl_progressbar_value_set(p, val);
  34.  
  35.  
  36.     if (val >= 20 && val < 35 ) {
  37.         ewl_progressbar_custom_label_set (p,
  38.                 "%.0lf / %.0lf kbytes");
  39.     }
  40.  
  41.     if (val >= 35 && val < 60) {
  42.         value = ewl_progressbar_value_get (p);
  43.         range = ewl_progressbar_range_get (p);
  44.  
  45.         snprintf (c, sizeof (c), "%.0lf of %.0lf beers", value, range);
  46.         ewl_progressbar_label_set (p, c);
  47.     }
  48.  
  49.     if (val == 60) 
  50.         ewl_progressbar_label_hide (p);
  51.  
  52.     if (val == 70)
  53.         ewl_progressbar_label_show (p);
  54.  
  55.     return 1;
  56. }
  57.  
  58. static void
  59. __destroy_progressbar_test_window(Ewl_Widget *w, void *ev_data __UNUSED__,
  60.                     void *user_data __UNUSED__)
  61. {
  62.     int i;
  63.  
  64.     for (i = 0; i < 3; i++) {
  65.         if (progress_timer[i]) {
  66.             ecore_timer_del(progress_timer[i]);
  67.             progress_timer[i] = NULL;
  68.         }
  69.     }
  70.     ewl_widget_destroy(w);
  71.     ewl_callback_append(progressbar_button, EWL_CALLBACK_CLICKED,
  72.             __create_progressbar_test_window, NULL);
  73. }
  74.  
  75. static void
  76. __set_new_range (Ewl_Widget * w __UNUSED__, void *ev_data __UNUSED__,
  77.                         void *user_data __UNUSED__)
  78. {
  79.     int i;
  80.     int j;
  81.  
  82.     j = rand() % 500;
  83.     printf ("New random value: %d\n", j);
  84.     
  85.     for (i = 0; i < 3; i++) {
  86.         ewl_progressbar_range_set (EWL_PROGRESSBAR (progressbar[i]), j);
  87.         
  88.         if (ewl_progressbar_value_get (EWL_PROGRESSBAR (progressbar[i])) >= j)
  89.             __rerun_progressbars (EWL_WIDGET (progressbar[i]), NULL, NULL);
  90.     }
  91. }
  92.  
  93. static void
  94. __rerun_progressbars (Ewl_Widget * w __UNUSED__, void *ev_data __UNUSED__, 
  95.                     void *user_data __UNUSED__)
  96. {
  97.     int i;
  98.  
  99.     for (i = 0; i < 3; i++) {
  100.         /* 
  101.          * Make sure to autolabel the bar on start again,
  102.          * if we stop a place where it labels manually.
  103.          * (since the auto label is turned off when you label manually)
  104.          */
  105.         ewl_progressbar_label_show (EWL_PROGRESSBAR (progressbar[i]));
  106.         ewl_progressbar_value_set (EWL_PROGRESSBAR (progressbar[i]), 0);
  107.         
  108.         if (progress_timer[i]) {
  109.             ecore_timer_del(progress_timer[i]);
  110.             progress_timer[i] = NULL;
  111.         }
  112.  
  113.         progress_timer[i] = ecore_timer_add(0.1, __increment_progress,
  114.                         (Ewl_Progressbar *) progressbar[i]);
  115.     }
  116. }
  117.  
  118. void
  119. __create_progressbar_test_window(Ewl_Widget * w, void *ev_data __UNUSED__,
  120.                     void *user_data __UNUSED__)
  121. {
  122.     Ewl_Widget     *progressbar_win;
  123.     Ewl_Widget     *progressbar_box;
  124.     Ewl_Widget     *progressbar_vbox;
  125.     Ewl_Widget     *button;
  126.     int            i;
  127.  
  128.     progressbar_button = w;
  129.  
  130.     progressbar_win = ewl_window_new();
  131.     ewl_window_title_set(EWL_WINDOW(progressbar_win), "Progressbar Test");
  132.     ewl_window_name_set(EWL_WINDOW(progressbar_win), "EWL Test Application");
  133.     ewl_window_class_set(EWL_WINDOW(progressbar_win), "EFL Test Application");
  134.     ewl_object_size_request(EWL_OBJECT(progressbar_win), 300, 20);
  135.  
  136.     if (w) { 
  137.         ewl_callback_del(w, EWL_CALLBACK_CLICKED, 
  138.                 __create_progressbar_test_window);
  139.         ewl_callback_append(progressbar_win, EWL_CALLBACK_DELETE_WINDOW,
  140.                 __destroy_progressbar_test_window, NULL);
  141.     } else
  142.         ewl_callback_append(progressbar_win, EWL_CALLBACK_DELETE_WINDOW,
  143.                     __close_main_window, NULL);
  144.     ewl_widget_show(progressbar_win);
  145.     
  146.     progressbar_vbox = ewl_vbox_new();
  147.     ewl_container_child_append(EWL_CONTAINER(progressbar_win), progressbar_vbox);
  148.     ewl_box_spacing_set(EWL_BOX(progressbar_vbox), 0);
  149.     ewl_widget_show(progressbar_vbox);
  150.  
  151.     progressbar_box = ewl_hbox_new();
  152.     ewl_container_child_append(EWL_CONTAINER(progressbar_vbox), 
  153.             progressbar_box);
  154.     ewl_box_spacing_set(EWL_BOX(progressbar_box), 0);
  155.     ewl_widget_show(progressbar_box);
  156.  
  157.     /*
  158.      * First and second progressbar 
  159.      */
  160.     for (i = 0; i < 2; i++) {
  161.         progressbar[i] = ewl_progressbar_new();
  162.         ewl_progressbar_value_set (EWL_PROGRESSBAR(progressbar[i]), 0);
  163.         ewl_widget_show (progressbar[i]);
  164.  
  165.         progress_timer[i] = ecore_timer_add(0.1, __increment_progress,
  166.                 (Ewl_Progressbar *) progressbar[i]);
  167.     
  168.         ewl_container_child_append(EWL_CONTAINER(progressbar_box), progressbar[i]);
  169.     }
  170.     
  171.  
  172.     /*
  173.      * Third big progressbar 
  174.      */
  175.     progressbar[2] = ewl_progressbar_new();
  176.     ewl_progressbar_value_set (EWL_PROGRESSBAR(progressbar[2]), 0);
  177.     ewl_widget_show (progressbar[2]);
  178.     
  179.     progress_timer[2] = ecore_timer_add(0.1, __increment_progress,
  180.             (Ewl_Progressbar *) progressbar[2]);
  181.     
  182.     ewl_container_child_append(EWL_CONTAINER(progressbar_vbox), progressbar[2]);
  183.  
  184.     
  185.     /*
  186.      * Add buttons at the bottom
  187.      */
  188.     progressbar_box = ewl_hbox_new();
  189.     ewl_container_child_append(EWL_CONTAINER(progressbar_vbox),
  190.             progressbar_box);
  191.     ewl_box_spacing_set(EWL_BOX(progressbar_box), 0);
  192.     ewl_widget_show(progressbar_box);
  193.                     
  194.     button = ewl_button_new();
  195.     ewl_button_label_set(EWL_BUTTON(button), "Rerun");
  196.     ewl_container_child_append(EWL_CONTAINER(progressbar_box), button);
  197.     ewl_callback_prepend(button, EWL_CALLBACK_CLICKED, 
  198.             __rerun_progressbars, NULL);
  199.         
  200.     ewl_object_fill_policy_set(EWL_OBJECT(button), EWL_FLAG_FILL_SHRINK);
  201.     ewl_widget_show (button);
  202.  
  203.     button = ewl_button_new();
  204.     ewl_button_label_set(EWL_BUTTON(button), "Set a random range from 0-500");
  205.     ewl_container_child_append(EWL_CONTAINER(progressbar_box), button);
  206.     ewl_callback_prepend(button, EWL_CALLBACK_CLICKED,
  207.             __set_new_range, NULL);
  208.     ewl_object_fill_policy_set(EWL_OBJECT(button), EWL_FLAG_FILL_SHRINK);
  209.     ewl_widget_show (button);
  210. }
  211.  
  212.